Thrift API and Filter Language
Filter Language是在HBase0.92之后引入的。它实现了在服务器端执行过滤当访问HBase通过Thrift或在Hbase shell中。
下面是一种简单的表达:
以下语法规则需要记住:
- 指定筛选器的名称,后跟括号中的逗号分隔的参数列表
- 如果参数代表字符串,它应该用单引号“ ‘ ”
- 代表布尔、整型或比较操作符的参数不应该用引号
- 参数可以是任意 ASCII 字符。如果单引号代表参数,必须使用额外的单引号来转义
82.2 复合过滤器和操作
-
If the
AND
operator is used, the key-value must satisfy both filters. OR
-
If the
OR
operator is used, the key-value must satisfy at least one of the filters.
SKIP
-
For a particular row, if any of the key-values fail the filter condition, the entire row is skipped.
-
For a particular row, key-values will be emitted until a key-value is reached that fails the filter condition.
可以组合多个运算符,创建过滤器的层次结构,如:
-
圆括号有最高优先级
-
其次是单目运算符
SKIP
andWHILE
二者具有相同优先级. -
再之后是
AND
以及OR
.
可以使用圆括号显式地控制执行优先级.
82.4. Compare Operator
提供了下面这些比较运算符:
-
LESS (<)
-
LESS_OR_EQUAL (⇐)
-
EQUAL (=)
-
NOT_EQUAL (!=)
-
GREATER (>)
客户端使用(<, ⇐, =, !=, >, >=)这些符号来表达比较操作。
比较器是下面任意一种:
-
BinaryComparator - 使用Bytes.compareTo(byte[], byte[])与特定的字节数组
-
BinaryPrefixComparator - 与特定的字节数组比较,只比较字节数组的长度.
-
RegexStringComparator - 与指定的字节数组使用给定的正则表达式比较. 只使用EQUAL 和 NOT_EQUAL
-
SubStringComparator - 检测特定的字符串是否出现在字节数组中,不区分大小写 只有EQUAL和EQUAL 可用
比较器的一般语法是:
不同比较器类型如下:
-
BinaryComparator - binary
-
BinaryPrefixComparator - binaryprefix
-
RegexStringComparator - regexstring
-
SubStringComparator - substring
ComparatorValue 可以是任意值
-
binary:abc
将匹配比”abc”大的任意值 -
binaryprefix:abc
将匹配首字母为 “abc”的任意值 -
substring:abc123
匹配以子串 “abc123”开始的任意串
82.6. Example PHP Client Program that uses the Filter Language
- KeyOnlyFilter
-
这个过滤器不带任何参数。它只返回每个键值的关键组件
- FirstKeyOnlyFilter
-
这个过滤器不带任何参数。它返回每行的第一个键值
- PrefixFilter
-
该过滤器只需要一个参数 – 行键的前缀. 它仅返回从指定的行前缀开始的行中存在的这些键值
- ColumnPrefixFilter
-
这个过滤器只需要一个参数– 列前缀. 它仅返回从指定列前缀开始的列中存在的这些键值. 列前缀必须为如下形式 .
- MultipleColumnPrefixFilter
-
该过滤器采用列前缀表为参数。返回以表中任一列前缀开头的列,每个列前缀为以下形式:
“qualifier”
. - ColumnCountGetFilter
-
参数为 – limit. 返回表中列的第一个限制数.
- PageFilter
-
参数为 – page size. 它从表中返回页大小的行数
- ColumnPaginationFilter
-
参数为 – limit 和 offset. 返回列偏移之后的列限制数,对所有行有效.
- InclusiveStopFilter
-
参数为– 停止扫描的行键. 它返回行中的所有关键值,包括指定行.
- TimeStampsFilter
-
时间戳表为参数. 返回匹配时间戳表的那些键值.
- RowFilter
-
该筛选器需要比较运算符和比较器.它使用比较运算符将每个行键与比较器进行比较,如果比较返回true,则返回该行中的所有键值
- Family Filter
-
该筛选器需要比较运算符和比较器.它使用比较运算符将每个列族名与比较器进行比较,如果返回真将返回该列族的所有cells.
- QualifierFilter
-
该筛选器需要比较运算符和比较器。它使用比较运算符将每个qualifier名与比较器进行比较,如果为真,返回那列中的所有键值.
- ValueFilter
-
该筛选器需要比较运算符和比较器。使用比较运算符将每个值与比较器进行比较,如果结果为真,返回键值
- DependentColumnFilter
-
需要两个参数 – 一个family一个qualifier. 它试图在每一行找到具有相同的时间戳的列,返回所有关键值。如果这行不包含特定的列,这行将不返回行键.
- SingleColumnValueFilter
-
该过滤器需要列族,qualifier,比较运算符和比较器.如果指定的列没有找到,那行所有的列都释放。如果找到,将返回真,行的所有列将被释放。
- SingleColumnValueExcludeFilter
- ColumnRangeFilter
-
这个过滤器用来选出位于mincolumn和maxcolumn之间的那些键。它也需要两个布尔变量来表示是否包括mincolumn和maxcolumn或没有。